735807c7067edc4713428104833afce69cf0244d,src/freenet/node/RequestSender.java,RequestSender,finish,#number#PeerNode#boolean#,1548
Before Change
if(status != NOT_FINISHED) {
if(logMINOR) Logger.minor(this, "Status already set to "+status+" - returning on "+this+" would be setting "+code+" from "+next);
if(next != null) {
if(fromOfferedKey)
next.noLongerRoutingTo(origTag, true);
else
next.noLongerRoutingTo(origTag, false);
}
return;
}
doOpennet = code == SUCCESS && !(fromOfferedKey || isSSK);
if(doOpennet)
origTag.waitingForOpennet(next);
else if(next != null) {
if(fromOfferedKey)
next.noLongerRoutingTo(origTag, true);
else
next.noLongerRoutingTo(origTag, false);
}
After Change
* @param next The node being routed to.
* @param fromOfferedKey Whether this was the result of fetching an offered key.
*/
private void finish(int code, PeerNode next, boolean fromOfferedKey) {
if(logMINOR) Logger.minor(this, "finish("+code+ ") on "+this+" from "+next);
boolean doOpennet;
synchronized(this) {
if(status != NOT_FINISHED) {
if(logMINOR) Logger.minor(this, "Status already set to "+status+" - returning on "+this+" would be setting "+code+" from "+next);
if(next != null) next.noLongerRoutingTo(origTag, fromOfferedKey);
return;
}
doOpennet = code == SUCCESS && !(fromOfferedKey || isSSK);
if(doOpennet)
origTag.waitingForOpennet(next);
else if(next != null) next.noLongerRoutingTo(origTag, fromOfferedKey);
status = code;
if(status == SUCCESS)
successFrom = next;
notifyAll();
}
if(status == SUCCESS) {
if((!isSSK) && transferTime > 0 && logMINOR) {
long timeTaken = System.currentTimeMillis() - startTime;
synchronized(avgTimeTaken) {
avgTimeTaken.report(timeTaken);
avgTimeTakenTransfer.report(transferTime);
if(logMINOR) Logger.minor(this, "Successful CHK request took "+timeTaken+" average "+avgTimeTaken);
if(logMINOR) Logger.minor(this, "Successful CHK request transfer "+transferTime+" average "+avgTimeTakenTransfer);
if(logMINOR) Logger.minor(this, "Search phase: median "+(avgTimeTaken.currentValue() - avgTimeTakenTransfer.currentValue())+"ms, mean "+(avgTimeTaken.meanValue() - avgTimeTakenTransfer.meanValue())+"ms");
}
}
if(next != null) {
next.onSuccess(false, isSSK);
}
// FIXME should this be called when fromOfferedKey??
node.nodeStats.requestCompleted(true, source != null, isSSK);
try {
//NOTE: because of the requesthandler implementation, this will block and wait
// for downstream transfers on a CHK. The opennet stuff introduces
// a delay of it's own if we don't get the expected message.
fireRequestSenderFinished(code);
if(doOpennet) {
finishOpennet(next);
}
} finally {
if(doOpennet)
origTag.finishedWaitingForOpennet(next);
}
} else {
node.nodeStats.requestCompleted(false, source != null, isSSK);
fireRequestSenderFinished(code);
}
if(doOpennet && next != null) next.noLongerRoutingTo(origTag, fromOfferedKey);
synchronized(this) {
opennetFinished = true;